﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using Prueba.Model;

namespace Prueba.ViewModel
{
    public class FiltroFdvViewModel:ViewModelBase
    {
        public FdvGridViewModel _FdvGrid;
        //public string _SelectedRecurso;

        public string _SelectedRecurso
        {
            get { return __SelectedRecurso; }
            set
            {
                if (__SelectedRecurso != value)
                {
                    __SelectedRecurso = value;
                    OnPropertyChanged(SelectedRecursoPropertyName);
                }
            }
        }
        private string __SelectedRecurso;
        public const string SelectedRecursoPropertyName = "_SelectedRecurso";

        public bool IsFilter
        {
            get { return _IsFilter; }
            set
            {
                if (_IsFilter != value)
                {
                    _IsFilter = value;
                    OnPropertyChanged(IsFilterPropertyName);
                }
            }
        }
        private bool _IsFilter;
        public const string IsFilterPropertyName = "IsFilter";

        public bool IsClean
        {
            get { return _IsClean; }
            set
            {
                if (_IsClean != value)
                {
                    _IsClean = value;
                    OnPropertyChanged(IsCleanPropertyName);
                }
            }
        }
        private bool _IsClean;
        public const string IsCleanPropertyName = "IsClean";

        public int? SelectedCantidad
        {
            get { return _SelectedCantidad; }
            set
            {
                if (_SelectedCantidad != value)
                {
                    _SelectedCantidad = value;
                    OnPropertyChanged(SelectedCantidadPropertyName);
                }
            }
        }
        private int? _SelectedCantidad;
        public const string SelectedCantidadPropertyName = "SelectedCantidad";

        public ObservableCollection<int> Cantidades
        {
            get { return _Cantidades; }
            set
            {
                if (_Cantidades != value)
                {
                    _Cantidades = value;
                    OnPropertyChanged(CantidadesPropertyName);
                }
            }
        }
        private ObservableCollection<int> _Cantidades;
        public const string CantidadesPropertyName = "Cantidades";

        public bool IsOrdenAscendente
        {
            get { return _IsOrdenAscendente; }
            set
            {
                if (_IsOrdenAscendente != value)
                {
                    _IsOrdenAscendente = value;
                    OnPropertyChanged(IsOrdenAscendentePropertyName);
                }
            }
        }
        private bool _IsOrdenAscendente;
        public const string IsOrdenAscendentePropertyName = "IsOrdenAscendente";

        public bool IsOrdenDescendente
        {
            get { return _IsOrdenDescendente; }
            set
            {
                if (_IsOrdenDescendente != value)
                {
                    _IsOrdenDescendente = value;
                    OnPropertyChanged(IsOrdenDescendentePropertyName);
                }
            }
        }
        private bool _IsOrdenDescendente;
        public const string IsOrdenDescendentePropertyName = "IsOrdenDescendente";

        private void GetDistinctCantidades()
        {
            if (this._FdvGrid != null)
            {

                this._Cantidades = new ObservableCollection<int>();
                try
                {
                    //(from o in this._FdvGrid.CvsRows.View
                    // where o.Cols._cols.Keys.Contains(this._SelectedRecurso)
                    // select o.Cols[this._SelectedRecurso].Cantidad).Distinct().ToList().ForEach(o =>
                    //                       this.Cantidades.Add(o)
                    //                   );

                    ObservableCollection<int> tmp = new ObservableCollection<int>();

                    foreach (var item in this._FdvGrid.CvsRows.View)
                    {
                        if(!tmp.Contains( (item as RowFdv).Cols[this._SelectedRecurso].Cantidad ))
                        {
                            tmp.Add((item as RowFdv).Cols[this._SelectedRecurso].Cantidad);
                        }
                    }

                    (from t in tmp
                    orderby t
                    select t).ToList().ForEach(o=>{
                        this.Cantidades.Add(o);
                    });
                }
                catch (Exception)
                {
                    
                }
            }
        }

        public FiltroFdvViewModel(FdvGridViewModel viewModel,string SelectedRecurso)
        {
            this._FdvGrid = viewModel;
            this._SelectedRecurso = SelectedRecurso;
            this.GetDistinctCantidades();
            this._IsClean = false;
            this._IsFilter = false;
        }
    }
}
